package py.edu.ucsa.sisale.rest;

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import py.edu.ucsa.sisale.dao.DaoFactory;
import py.edu.ucsa.sisale.model.dto.Estado;

/// Will map the resource to the URL estados
@Path("/estados")
public class EstadosRs {

	  // Allows to insert contextual objects into the class, 
	  // e.g. ServletContext, Request, Response, UriInfo
	  @Context
	  UriInfo uriInfo;
	  @Context
	  Request request;


	  // Return the list of todos to the user in the browser
	  @GET
	  @Produces(MediaType.TEXT_XML)
	  public List<Estado> getEstadosBrowser() {
		  return DaoFactory.getEstado().getAll();
	  }
	  
	  // Return the list of todos for applications
	  @GET
	  @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
	  public List<Estado> getEstados() {
		
		    return DaoFactory.getEstado().getAll();
	  }
	  
	  
	  // retuns the number of todos
	  // use http://localhost:8080/de.vogella.jersey.todo/rest/todos/count
	  // to get the total number of records
	  @GET
	  @Path("count")
	  @Produces(MediaType.TEXT_PLAIN)
	  public String getCount() {
	    int count =  DaoFactory.getEstado().getAll().size();
	    return String.valueOf(count);
	  }
	  
	  @POST
	  @Produces(MediaType.TEXT_HTML)
	  @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
	  public void newTodo(	      
		  @FormParam("nombre") String nombre,
	      @FormParam("descripcion") String descripcion,
	      @Context HttpServletResponse servletResponse) throws IOException {
	    Estado estado = new Estado (nombre, descripcion);  
	    DaoFactory.getEstado().create(estado);	    	    
	    servletResponse.sendRedirect("../create_estado.html");
	  }
	  
	  
	  // Defines that the next path parameter after todos is
	  // treated as a parameter and passed to the TodoResources
	  // Allows to type http://localhost:8080/de.vogella.jersey.todo/rest/todos/1
	  // 1 will be treaded as parameter todo and passed to TodoResource
	  @Path("{estado}")
	  public EstadoRs getTodo(@PathParam("estado") String id) {
	    return new EstadoRs(uriInfo, request, id);
	  }

}
